const express = require("express");
const router = express.Router();
const bannerModel = require("../db/model/bannerModel");

/**
 * @api {post} /banner/create 增加轮播图
 * @apiName /banner/create
 * @apiGroup banner
 *
 * @apiParam {String} link 链接.
 * @apiParam {String} path 图片的链接.
 *
 * @apiSuccess {String} msg  信息.
 * @apiSuccess {String} code 状态码.
 */

// 添加接口
router.post("/create", async (req, res) => {
  const { link, path } = req.body;
  const result = await bannerModel.insertMany({ link, path });
  if (!result) return res.send({ code: -1, msg: "轮播图添加失败" });
  res.send({ code: 0, msg: "轮播图添加成功" });
});


/**
 * @api {get} /banner/alllist 分页查询所有轮播图
 * @apiName /banner/alllist
 * @apiGroup banner
 *
 * @apiParam {Number} page 分页的页码数.
 * @apiParam {Number} pageSize 分页的数量.
 *
 * @apiSuccess {String} msg  信息.
 * @apiSuccess {String} code 状态码.
 * @apiSuccess {Number} count 数据总条数.
 * @apiSuccess {Array} list 数据信息.
 * @apiSuccess {String} list.item.path 轮播图的图片链接.
 */

// 查询所有接口
router.get("/alllist", async (req, res) => {
  // limit 限制数量条数
  // skip 跳过几条
  const {page = 1,pageSize = 2} = req.query;
  const count = await bannerModel.count(); // 获取总数量
  const result = await bannerModel.find().limit(pageSize).skip((page-1)*pageSize);
  if (!result) return res.send({ code: -1, msg: "轮播图查询失败" });
  res.send({ code: 0, msg: "轮播图查询成功", list: result, count });
});

/**
 * @api {post} /banner/del 删除轮播图
 * @apiName /banner/del
 * @apiGroup banner
 *
 * @apiParam {String} id 轮播图的id.
 *
 * @apiSuccess {String} msg  信息.
 * @apiSuccess {String} code 状态码.
 */

// 根据id删除录播图
router.post("/del", async (req, res) => {
  const {id} = req.body;
  
  const result = await bannerModel.deleteOne({_id:id})
  if (!result) return res.send({ code: -1, msg: "轮播图删除失败" });
  res.send({ code: 0, msg: "轮播图删除成功", });
});

/**
 * @api {post} /banner/update 更新轮播图
 * @apiName /banner/update
 * @apiGroup banner
 *
 * @apiParam {String} id 轮播图的id.
 *
 * @apiSuccess {String} msg  信息.
 * @apiSuccess {String} code 状态码.
 */

// 根据id更新录播图
router.post("/update", async (req, res) => {
  const {id, pushState} = req.body;
  // 根据id修改更新状态
  const result = await bannerModel.updateOne({_id:id},{$set: {push:pushState}})
  if (!result) return res.send({ code: -1, msg: "轮播图发布失败" });
  res.send({ code: 0, msg: "轮播图发布成功", });
});

// 模糊搜索 link

/**
 * @api {post} /banner/searchLink 搜索轮播图
 * @apiName /banner/searchLink
 * @apiGroup banner
 *
 * @apiParam {String} kw 关键字.
 *
 * @apiSuccess {String} msg  信息.
 * @apiSuccess {String} code 状态码.
 */

router.get("/searchLink",async (req,res) => {
  const {kw} = req.query 
  console.log(kw)
  // 通过关键字创建正则表达式
  const reg = new RegExp(kw, "i")
  // 查询数据库的时候 通过$regex 过滤符合正则表达式的信息
  const result = await bannerModel.find({link: { $regex: reg }})
   if (!result) return res.send({ code: -1, msg: "查询失败" });
  res.send({ code: 0, msg: "查询成功",list: result });
})

/**
 * @api {get} /banner/getListPush 查询已发布轮播图
 * @apiName /banner/getListPush
 * @apiGroup banner
 *
 * @apiParam {String} kw 关键字.
 *
 * @apiSuccess {String} msg  信息.
 * @apiSuccess {String} code 状态码.
 */
// 查询已发布的接口信息
router.get("/getListPush",async (req,res) => {
  const result = await bannerModel.find({push:"1"})
  if (!result) return res.send({ code: -1, msg: "查询失败" });
  res.send({ code: 0, msg: "查询成功",list: result });
})
// ## 前台
//  1. 提供一个接口给前台项目使用 查询已发布的轮播图
// ## 后台
//  1. 新增轮播图
//  2. 更新轮播图状态 未发布 -> 已发布
//  3. 读取轮播图的列表
//  4. 删除轮播图

module.exports = router;
